#ifndef PROGRESSARC_H
#define PROGRESSARC_H

/**
 * 百分比圆弧进度条控件
 * 1、可设置范围值，支持负数
 * 2、可设置精确度，最大支持小数点后3位
 * 3、可设置圆弧宽度
 * 4、可设置开始旋转角度和结束旋转角度
 * 5、可设置标题
 * 6、可设置进度颜色/背景颜色/值颜色/文字颜色
 * 7、自适应窗体拉伸，文字自动缩放
 * 8、可设置百分比模式，自动计算值转换为百分比
 */

#include <QWidget>

class progressArc : public QWidget
{
    Q_OBJECT

    Q_PROPERTY(double minValue READ getMinValue WRITE setMinValue)
    Q_PROPERTY(double maxValue READ getMaxValue WRITE setMaxValue)
    Q_PROPERTY(double value READ getValue WRITE setValue)
    Q_PROPERTY(int precision READ getPrecision WRITE setPrecision)

    Q_PROPERTY(int startAngle READ getStartAngle WRITE setStartAngle)
    Q_PROPERTY(int endAngle READ getEndAngle WRITE setEndAngle)

    Q_PROPERTY(QString title READ getTitle WRITE setTitle)

    Q_PROPERTY(QColor bgColor READ getBgColor WRITE setBgColor)
    Q_PROPERTY(QColor arcColor READ getArcColor WRITE setArcColor)
    Q_PROPERTY(QColor textColor READ getTextColor WRITE setTextColor)
    Q_PROPERTY(QColor titleColor READ getTitleColor WRITE setTitleColor)
    Q_PROPERTY(QColor baseColor READ getBaseColor WRITE setBaseColor)

    Q_PROPERTY(bool percent READ getPercent WRITE setPercent)
    Q_PROPERTY(int arcWidth READ getArcWidth WRITE setArcWidth)

public:
    explicit progressArc(QWidget *parent = nullptr);
   ~progressArc();

protected:
    void paintEvent(QPaintEvent *);
    void drawArc(QPainter *painter);
    void drawValue(QPainter *painter);
    void drawTitle(QPainter *painter);

private:
    double minValue;            //最小值
    double maxValue;            //最大值
    double value;               //目标值
    int precision;              //精确度，小数点后几位

    int startAngle;             //开始旋转角度
    int endAngle;               //结束旋转角度

    QString title;              //标题

    QColor bgColor;             //背景颜色
    QColor arcColor;            //圆弧颜色
    QColor textColor;           //文字颜色
    QColor titleColor;          //标题颜色
    QColor baseColor;           //基准颜色

    bool percent;               //百分比模式
    int arcWidth;               //圆弧宽度

public:
    //获取最大值、最小值、值、精确度
    double getMinValue();
    double getMaxValue();
    double getValue();
    int getPrecision();

    //获取开始旋转角度和结束旋转角度
    int getStartAngle();
    int getEndAngle();

    //获取标题
    QString getTitle() const;

    //获取背景/圆弧/文字/标题/基准颜色
    QColor getBgColor() const;
    QColor getArcColor() const;
    QColor getTextColor() const;
    QColor getTitleColor() const;
    QColor getBaseColor() const;

    //获取百分比、圆弧宽度
    bool getPercent();
    int getArcWidth();

public Q_SLOTS:
    //设置范围
    void setRange(double minValue,double maxValue);
    void setRange(int minValue,int maxValue);

    //设置最小值和最大值
    void setMinValue(double minValue);
    void setMaxValue(double maxValue);

    //设置目标值
    void setValue(double value);
    void setValue(int value);

    //设置精确度
    void setPrecision(int precision);

    //设置开始旋转角度、结束旋转角度
    void setStartAngle(int startAngle);
    void setEndAngle(int endAngle);

    //设置标题
    void setTitle(const QString& title);

    //设置背景/圆弧/文字/标题/基准颜色
    void setBgColor(const QColor& bgColor);
    void setArcColor(const QColor& arcColor);
    void setTextColor(const QColor& textColor);
    void setTitleColor(const QColor& titleColor);
    void setBaseColor(const QColor& baseColor);

    //设置百分比模式
    void setPercent(bool percent);
    //设置圆弧宽度
    void setArcWidth(int arcWidth);

signals:

};

#endif // PROGRESSARC_H
